#===- Makefile.sysc.rules ----------------------------------*- Makefile -*--===#
#
# Makefile rules for autopilot SystemC simulation flow
#
#-  (c) Copyright 2011-2018 Xilinx, Inc. All rights reserved.
#-
#-  This file contains confidential and proprietary information
#-  of Xilinx, Inc. and is protected under U.S. and
#-  international copyright and other intellectual property
#-  laws.
#-
#-  DISCLAIMER
#-  This disclaimer is not a license and does not grant any
#-  rights to the materials distributed herewith. Except as
#-  otherwise provided in a valid license issued to you by
#-  Xilinx, and to the maximum extent permitted by applicable
#-  law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
#-  WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
#-  AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
#-  BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
#-  INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
#-  (2) Xilinx shall not be liable (whether in contract or tort,
#-  including negligence, or under any other theory of
#-  liability) for any loss or damage of any kind or nature
#-  related to, arising under or in connection with these
#-  materials, including for any direct, or any indirect,
#-  special, incidental, or consequential loss or damage
#-  (including loss of data, profits, goodwill, or any type of
#-  loss or damage suffered as a result of any action brought
#-  by a third party) even if such damage or loss was
#-  reasonably foreseeable or Xilinx had been advised of the
#-  possibility of the same.
#-
#-  CRITICAL APPLICATIONS
#-  Xilinx products are not designed or intended to be fail-
#-  safe, or for use in any application requiring fail-safe
#-  performance, such as life-support or safety devices or
#-  systems, Class III medical devices, nuclear facilities,
#-  applications related to the deployment of airbags, or any
#-  other applications that could lead to death, personal
#-  injury, or severe property or environmental damage
#-  (individually and collectively, "Critical
#-  Applications"). Customer assumes the sole risk and
#-  liability of any use of Xilinx products in Critical
#-  Applications, subject only to applicable laws and
#-  regulations governing limitations on product liability.
#-
#-  THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
#-  PART OF THIS FILE AT ALL TIMES. 
#- ************************************************************************

#
#===------------------------------------------------------------------------===#


# Required user variables:
#TARGET

# Optional variables:
#ExtraCFlags
#ExtraCXXFlags
#ExtraLDFlags

# Users may have their own SystemC enviornments, by defineing the
# following variables
#HLS_SYSTEMC_HOME
#HLS_SYSTEMC_LIB_PATH

### Common shell commands.
Echo = @echo
MKDIR = mkdir -p
Make = make
MV = mv
RM = rm

### Directory for object files.
ifndef ObjDir
  ObjDir := obj
endif

### Switch for displaying detailed information.
#VERBOSE = 1


ifdef VERBOSE
  Verb :=
else
  Verb := @
endif

ifndef AUTOPILOT_TOOL
  AUTOPILOT_TOOL = "$(shell vivado_hls -proot)/tools"
endif

ifndef AUTOPILOT_TECH
  AUTOPILOT_TECH = "$(AUTOPILOT_ROOT)/common/technology"
endif

ifndef HLS_SYSTEMC_HOME
  HLS_SYSTEMC_HOME = $(AUTOPILOT_TOOL)/systemc
endif

ifndef HLS_SYSTEMC_LIB_PATH
  ifeq ($(AUTOPILOT_MACH),win64)
    ifdef __USE_CLANG__
      HLS_SYSTEMC_LIB_PATH = $(AUTOPILOT_TOOL)/systemc/clang
    else
      HLS_SYSTEMC_LIB_PATH = $(AUTOPILOT_TOOL)/systemc/gcc
    endif
  else
    HLS_SYSTEMC_LIB_PATH = $(AUTOPILOT_TOOL)/systemc/lib
  endif
endif

ifndef HLS_FPO_LIB_PATH
   HLS_FPO_LIB_PATH = $(AUTOPILOT_TOOL)/fpo_v7_0
endif

ifndef HLS_OPENCV_LIB_PATH
  ifneq ($(AUTOPILOT_MACH),win64)
    #ifdef __USE_CLANG__
    #  HLS_OPENCV_LIB_PATH = $(AUTOPILOT_TOOL)/opencv/opencv_clang
    #else
      HLS_OPENCV_LIB_PATH = $(AUTOPILOT_TOOL)/opencv/opencv_gcc
    #endif
  else
    HLS_OPENCV_LIB_PATH = $(AUTOPILOT_TOOL)/opencv
  endif
endif

ifndef HLS_FFT_LIB_PATH
  HLS_FFT_LIB_PATH = $(AUTOPILOT_TOOL)/fft_v9_1
endif

ifndef HLS_FIR_LIB_PATH
  HLS_FIR_LIB_PATH = $(AUTOPILOT_TOOL)/fir_v7_0
endif

ifndef HLS_DDS_LIB_PATH
  HLS_DDS_LIB_PATH = $(AUTOPILOT_TOOL)/dds_v6_0
endif

ifndef HLS_MATHHLS_LIB_PATH
  HLS_MATHHLS_LIB_PATH = $(AUTOPILOT_ROOT)/$(AUTOPILOT_MACH)/lib/csim
endif


ifdef __USE_CLANG__
ifdef AP_CLANG_PATH
CC      = $(AP_CLANG_PATH)/clang
CXX     = $(AP_CLANG_PATH)/clang++
else
CC      = clang
CXX     = clang++
endif
else
ifdef AP_GCC_PATH
CC      = $(AP_GCC_PATH)/gcc
CXX     = $(AP_GCC_PATH)/g++
else
CC	= gcc
CXX	= g++
endif
endif

ifdef __USE_CLANG_M32__
CC      += -m32
CXX     += -m32
endif

LINUX	=
INCPATH	= .
SRCPATH = .
BINPATH = .
SYSC = $(HLS_SYSTEMC_HOME)
SYSCINC = $(SYSC)/include
SYSCLIB = $(HLS_SYSTEMC_LIB_PATH)
FPOLIB = $(HLS_FPO_LIB_PATH)
OPENCVLIB = $(HLS_OPENCV_LIB_PATH)
FFTLIB = $(HLS_FFT_LIB_PATH)
FIRLIB = $(HLS_FIR_LIB_PATH)
DDSLIB = $(HLS_DDS_LIB_PATH)
MATHHLSLIB = $(HLS_MATHHLS_LIB_PATH)
DEFINE =
ATBG_CFLAG = -DSST_SIM_ENABLE -DSST_ATBG_ENABLE
IFLAG += -I $(INCPATH) -I "$(SYSCINC)"
IFLAG += -I "$(AUTOPILOT_ROOT)/include"
#IFLAG += -I "$(AUTOPILOT_TECH)/autopilot/sim"
#IFLAG += -I "$(AUTOPILOT_TECH)/autopilot/etc"
IFLAG += -I "$(AUTOPILOT_TECH)/generic/SystemC/AESL_comp"
LFLAG += -Wl,--as-needed
LFLAG += -Wl,-rpath,"$(SYSCLIB)" -L "$(SYSCLIB)" -lsystemc -lpthread

ifdef __SIM_MATHHLS__

  ifdef __USE_CLANG__ 
    ifeq ($(AUTOPILOT_MACH),win64)
      LFLAG += -Wl,-rpath,"$(MATHHLSLIB)" -L "$(MATHHLSLIB)" -lhlsmc++-CLANG39-x64
    else
      LFLAG += -Wl,-rpath,"$(MATHHLSLIB)" -L "$(MATHHLSLIB)" -lhlsmc++-CLANG39
    endif
  else 
    ifeq ($(AUTOPILOT_MACH),win64)
      LFLAG += -Wl,-rpath,"$(MATHHLSLIB)" -L "$(MATHHLSLIB)" -lhlsmc++-GCC62-x64
    else
      LFLAG += -Wl,-rpath,"$(MATHHLSLIB)" -L "$(MATHHLSLIB)" -lhlsmc++-GCC46
    endif
  endif

  ifndef __SIM_MATHSTD__ 
    ifdef __USE_CLANG__ 
      ifeq ($(AUTOPILOT_MACH),win64)
        LFLAG += -fno-builtin -fno-inline -Wl,-rpath,"$(MATHHLSLIB)" -L "$(MATHHLSLIB)" -lhlsm-CLANG39-x64
      else
        LFLAG += -fno-builtin -fno-inline -Wl,-rpath,"$(MATHHLSLIB)" -L "$(MATHHLSLIB)" -lhlsm-CLANG39
      endif
    else
      ifeq ($(AUTOPILOT_MACH),win64)
        LFLAG += -fno-builtin -fno-inline -Wl,-rpath,"$(MATHHLSLIB)" -L "$(MATHHLSLIB)" -lhlsm-GCC62-x64
      else
        LFLAG += -fno-builtin -fno-inline -Wl,-rpath,"$(MATHHLSLIB)" -L "$(MATHHLSLIB)" -lhlsm-GCC46
      endif
    endif
  endif

  export LD_LIBRARY_PATH := ${LD_LIBRARY_PATH}:$(MATHHLSLIB)
endif

ifdef __SIM_FPO__
   LFLAG += -Wl,-rpath,"$(FPOLIB)" -L "$(FPOLIB)" -lgmp -lmpfr -lIp_floating_point_v7_0_bitacc_cmodel
endif

ifdef __SIM_OPENCV__
  ifeq ($(shell uname -s), Linux)
    LFLAG += -Wl,-rpath,"$(OPENCVLIB)" -L "$(OPENCVLIB)" -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab
  else
    CV_VER = 245
    #delete lopencv_superres245 for win64
    LFLAG += -Wl,-rpath,"$(OPENCVLIB)" -L "$(OPENCVLIB)" -lopencv_calib3d$(CV_VER) -lopencv_contrib$(CV_VER) -lopencv_core$(CV_VER) -lopencv_features2d$(CV_VER) -lopencv_flann$(CV_VER) -lopencv_gpu$(CV_VER) -lopencv_highgui$(CV_VER) -lopencv_imgproc$(CV_VER) -lopencv_legacy$(CV_VER) -lopencv_ml$(CV_VER) -lopencv_objdetect$(CV_VER) -lopencv_photo$(CV_VER) -lopencv_stitching$(CV_VER) -lopencv_video$(CV_VER) -lopencv_videostab$(CV_VER)
  endif
endif

ifdef __SIM_FFT__
  LFLAG += -Wl,-rpath,"$(FFTLIB)" -L "$(FFTLIB)" -lIp_xfft_v9_1_bitacc_cmodel
  export LD_LIBRARY_PATH := ${LD_LIBRARY_PATH}:$(FFTLIB)
endif

ifdef __SIM_FIR__
  LFLAG += -Wl,-rpath,"$(FIRLIB)" -L "$(FIRLIB)" -lgmp -lIp_fir_compiler_v7_2_bitacc_cmodel
  export LD_LIBRARY_PATH := ${LD_LIBRARY_PATH}:$(FIRLIB)
endif

ifdef __SIM_DDS__
  LFLAG += -Wl,-rpath,"$(DDSLIB)" -L "$(DDSLIB)" -lIp_dds_compiler_v6_0_bitacc_cmodel
  export LD_LIBRARY_PATH := ${LD_LIBRARY_PATH}:$(DDSLIB)
endif

CFLAG += $(DEBUG) $(DEFINE) -DC_TEST
CFLAG += $(ATBG_CFLAG)

# Only for glibc2.12 bug, define __USE_XOPEN2K8, CR694034.
RUNNING_LINUX := "$(shell uname | grep -i Linux)"
ifeq ($(RUNNING_LINUX),"Linux")
LDD_VERSION = "$(shell ldd --version | grep 2.12)"
  ifneq ($(LDD_VERSION), "")
    CFLAG += -D__USE_XOPEN2K8
    DFLAG += -D__USE_XOPEN2K8
  endif
else
CFLAG += -D__USE_XOPEN2K8
DFLAG += -D__USE_XOPEN2K8
endif


ifndef HLS_SOURCES
  # Find all .cpp, .cp, .cxx, .cc, .c++, .c, .C in current directory and in $(HLS_RtlSCDir).
  SUFFIX_CPP  = cpp
  SUFFIX_CP   = cp
  SUFFIX_CXX  = cxx
  SUFFIX_CC   = cc
  SUFFIX_C++  = c++
  SUFFIX_c    = c
  SUFFIX_C    = C
  SOURCES_CPP = $(wildcard *.$(SUFFIX_CPP))
  SOURCES_CP = $(wildcard *.$(SUFFIX_CP))
  SOURCES_CXX = $(wildcard *.$(SUFFIX_CXX))
  SOURCES_CC = $(wildcard *.$(SUFFIX_CC))
  SOURCES_C++ = $(wildcard *.$(SUFFIX_C++))
  SOURCES_c = $(wildcard *.$(SUFFIX_c))
  SOURCES_C = $(wildcard *.$(SUFFIX_C))

ifdef HLS_RtlSCDir
  SOURCES_CPP += $(wildcard $(HLS_RtlSCDir)/*.cpp)
  SOURCES_CC += $(wildcard $(HLS_RtlSCDir)/*.cc)
  SOURCES_C += $(wildcard $(HLS_RtlSCDir)/*.c)
endif

  FILE_SOURCES_CPP = $(notdir $(SOURCES_CPP))
  FILE_SOURCES_CC = $(notdir $(SOURCES_CC))
  FILE_SOURCES_C = $(notdir $(SOURCES_C))

  override HLS_SOURCES = $(SOURCES_CPP) $(SOURCES_CP) $(SOURCES_CXX) $(SOURCES_CC) $(SOURCES_C++) $(SOURCES_c) $(SOURCES_C)
endif

OBJECTS := $(basename $(notdir $(HLS_SOURCES)))
OBJECTS := $(OBJECTS:%=$(ObjDir)/%.o)


ERR_FILE = err.log

ERRNO=`wc -l $(ERR_FILE) | sed "s/ $(ERR_FILE)//"`

.debug1::
	$(Echo) "2 src: $(HLS_SOURCES)"
	$(Echo) "2 obj: $(OBJECTS)"
#--------------------------------------------------------------------
# Set the VPATH so that we can find source files.
#--------------------------------------------------------------------
VPATH=$(HLS_RtlSCDir)

#--------------------------------------------------------------------
# Reset the list of suffixes we know how to build
#--------------------------------------------------------------------
.SUFFIXES:
.SUFFIXES: .c .cc .cpp .h


#ENABLE_PROFILING :=
#ENABLE_OPTIMIZED := 1

ifdef ENABLE_PROFILING
  BuildMode := profile
  CXX.Flags := -O3 -DNDEBUG -felide-constructors -finline-functions -pg
  C.Flags   := -O3 -DNDEBUG -pg
  LD.Flags  := -O3 -DNDEBUG -pg 
else
  ifdef AP_ENABLE_OPTIMIZED
    BuildMode := release
    #CXX.Flags  := -O3 -DNDEBUG -finline-functions \
    #              -felide-constructors -fomit-frame-pointer
    CXX.Flags  := -O1 -DNDEBUG
    C.Flags    := -O1 -DNDEBUG -fomit-frame-pointer
    LD.Flags   := -O1 -DNDEBUG 
  else
    BuildMode := debug
    CXX.Flags := -D_DEBUG
    C.Flags   := -D_DEBUG
ifdef __USE_CLANG__
    LD.Flags  := -D_DEBUG -g -O1
else
    LD.Flags  := -D_DEBUG
endif
    KEEP_SYMBOLS := 1
  endif
endif


CPPFLAGS += $(IFLAG) $(CFLAG)
CFLAGS += $(IFLAG) $(CFLAG)
LDFLAGS += $(LFLAG)

ifdef AP_GCC_M32
CFLAGS += -m32
CPPFLAGS += -m32
LDFLAGS += -m32
endif

ifdef __USE_CLANG__
CXX.Flags += $(CXXFLAGS) -fpermissive $(ExtraCXXFlags) $(TOOLCHAIN)
else
CXX.Flags += $(CXXFLAGS) -fpermissive $(ExtraCXXFlags)
endif
C.Flags   += $(CFLAGS) $(ExtraCFlags)
CPP.Flags += $(CPPFLAGS) 
LD.Flags  += $(LDFLAGS) $(ExtraLDFlags)
AR.Flags  := cru
LibTool.Flags := --tag=CXX
#CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused
CompileCommonOpts := 

ifdef __USE_CLANG__
ifdef __COSIM_FLOW__
#CompileCommonOpts += -D_GLIBCXX_USE_CXX11_ABI=0
endif
endif

#-------------- C/C++ to binary ----------------------------------------
Compile.C     = $(CC) $(CPP.Flags) $(CompileCommonOpts) -c $(C.Flags)
Compile.CXX   = $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) -c

CXXPATH = $(shell which ${CXX})

ifndef CSIM_DESIGN
$(TARGET)::
	$(Echo) "   Build using \"${CXXPATH}\""
endif

$(TARGET):: $(ObjDir)/.dir $(OBJECTS)
	$(Echo) "   Generating $(TARGET)" $(AVE_DIR_DLOG)
	$(Verb)$(CXX) $(OBJECTS) $(LD.Flags) -o $@

#	$(Echo) "[$(MSGH)] Done!" $(AVE_DIR_DLOG)


#---------- Auto CPP/C Dependencies ----------
$(ObjDir)/%.o: %.cpp $(ObjDir)/.dir
	$(Echo) "   Compiling $*.cpp" $(AVE_DIR_DLOG)
	$(Verb) if $(Compile.CXX) $(DFLAG) -MD -MT $@ -MP -MF $(ObjDir)/$*.CXXd $< -o $@ ; \
	then $(MV) -f "$(ObjDir)/$*.CXXd" "$(ObjDir)/$*.d"; \
	else $(RM) -f "$(ObjDir)/$*.CXXd"; exit 1; fi

$(ObjDir)/%.o: %.cc $(ObjDir)/.dir
	$(Echo) "   Compiling $*.cc" $(AVE_DIR_DLOG)
	$(Verb) if $(Compile.CXX) $(DFLAG) -MD -MT $@ -MP -MF $(ObjDir)/$*.CXXd $< -o $@ ; \
	then $(MV) -f "$(ObjDir)/$*.CXXd" "$(ObjDir)/$*.d"; \
	else $(RM) -f "$(ObjDir)/$*.CXXd"; exit 1; fi

$(ObjDir)/%.o: %.c $(ObjDir)/.dir
	$(Echo) "   Compiling $*.c" $(AVE_DIR_DLOG)
	$(Verb) if $(Compile.C) $(DFLAG)  -MD -MT $@ -MP -MF $(ObjDir)/$*.Cd $< -o $@ ; \
	then $(MV) -f "$(ObjDir)/$*.Cd" "$(ObjDir)/$*.d"; \
	else $(RM) -f "$(ObjDir)/$*.Cd"; exit 1; fi


# This rules ensures that header files that are removed still have a rule for
# which they can be "generated."  This allows make to ignore them and
# reproduce the dependency lists.
%.h:: ;


#-------------- C/C++ to virtual binary --------------------------------
# You can use ExtraUserBCs to add additional BC object files to be linked.
#
#    set CFLAGS "-DAESL_SYN -I${AUTOPILOT_INC} -I${MATH_INC} \
#                -O0 -c -emit-llvm $ExtCFlags"

Extra.BCCPP.Flags += -emit-llvm -DAUTOPILOT_BC_SIM
BCC.Flags = $(CPP.Flags) $(CompileCommonOpts) $(C.Flags) $(Extra.BCCPP.Flags)
BCCXX.Flags = $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) $(Extra.BCCPP.Flags)
Compile.BCC   = $(AUTOPILOT_TOOL)/clang/bin/clang -hls $(BCC.Flags) -c -emit-llvm 
Compile.BCCXX = $(AUTOPILOT_TOOL)/clang/bin/clang++ -hls $(BCCXX.Flags) -c -emit-llvm
Compile.BCLD  = $(AUTOPILOT_TOOL)/clang/bin/llvm-ld -disable-inlining

#ifndef BCLibDir
#BCLibDir = $(HLS_RtlSCDir)/../tmp
#endif

#ExtraUserBCs := $(wildcard $(BCLibDir)/*.o.3.sim.bc)
#ExtraUsers := $(notdir $(ExtraUsers))

#VPATH=$(BCLibDir):$(VPATH)

SOURCES_C.BC += $(wildcard *.c)
OBJECTS_C.BC = $(SOURCES_C.BC:%.c=$(ObjDir)/%.bc)

OBJECTS.BC = $(ExtraUserBCs) $(OBJECTS_C.BC)

.debug2:
	$(Echo) "$(ExtraUsers)"
	$(Echo) "$(OBJECTS.BC)"


$(TARGET.BC): $(OBJECTS.BC)
	$(Echo) "   Generating BC $(TARGET.BC) from $(OBJECTS.BC)" $(AVE_DIR_DLOG)
	$(Verb)$(Compile.BCLD) $(OBJECTS.BC) $(BCLD.Flags) -o $@

#	$(Echo) "[$(MSGH)] Done!" $(AVE_DIR_DLOG)

#---------- Auto CPP/C to BC Dependencies ----------
$(ObjDir)/%.bc: %.cpp $(ObjDir)/.dir
	$(Echo) "   Compiling $*.cpp in bc." $(AVE_DIR_DLOG)
	$(Verb) if $(Compile.BCCXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.CXXd $< -o $@ ; \
	then $(MV) -f "$(ObjDir)/$*.CXXd" "$(ObjDir)/$*.d"; \
	else $(RM) -f "$(ObjDir)/$*.CXXd"; exit 1; fi

$(ObjDir)/%.bc: %.cc $(ObjDir)/.dir
	$(Echo) "   Compiling $*.cpp in bc." $(AVE_DIR_DLOG)
	$(Verb) if $(Compile.BCCXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.CXXd $< -o $@ ; \
	then $(MV) -f "$(ObjDir)/$*.CXXd" "$(ObjDir)/$*.d"; \
	else $(RM) -f "$(ObjDir)/$*.CXXd"; exit 1; fi

$(ObjDir)/%.bc: %.c $(ObjDir)/.dir
	$(Echo) "   Compiling $*.c in bc" $(AVE_DIR_DLOG)
	$(Verb) if $(Compile.BCC) -MD -MT $@ -MP -MF $(ObjDir)/$*.Cd $< -o $@ ; \
	then $(MV) -f "$(ObjDir)/$*.Cd" "$(ObjDir)/$*.d"; \
	else $(RM) -f "$(ObjDir)/$*.Cd"; exit 1; fi


#---------- Include CPP Dependencies
Sources := $(HLS_SOURCES)
DependFiles := $(basename $(filter %.cpp %.c %.cc, $(Sources)))
DependFiles := $(patsubst %,$(ObjDir)/%.d,$(DependFiles))
-include /dev/null $(DependFiles)

.debug:
	$(Echo) $(DependFiles)

#--- To create other directories, as needed, and timestamp their creation
%/.dir:
	$(Verb)	$(MKDIR) $* >/dev/null
	$(Verb) $(DATE) > $@

.PRECIOUS: $(ObjDir)/.dir


debug:
	make DEBUG="-g -D_DEBUG" -f Makefile

clean:
	$(Echo) "[$(MSGH)] Removing $(OBJECTS) $(DependFiles) $(TARGET) .." $(AVE_DIR_DLOG)
	$(Verb)-rm -rf $(OBJECTS)
	$(Verb)-rm -rf $(OBJECTS_C.BC)
	$(Verb)-rm -rf $(DependFiles)
	$(Verb)-rm -rf $(TARGET)
	$(Echo) "[$(MSGH)] Done!" $(AVE_DIR_DLOG)

explain:
	$(Echo) "The following information represents your program:" 
	$(Echo) "Final executable name: $(TARGET)"
	$(Echo) "Source files:      $(HLS_SOURCES)"
	$(Echo) "Object files:      $(OBJECTS)"
	$(Echo) "Dep files:         $(DEPS)"

